package com.bpmn.handler;

import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.bpmn.common.holder.TenantContextHolder;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.StringValue;

import java.util.List;

/**
 * @author rain
 */
public class CustomTenantHandler implements TenantLineHandler {

    @Override
    public Expression getTenantId() {
        // 假设有一个租户上下文，能够从中获取当前用户的租户
        String tenantId = TenantContextHolder.getTenantId();
        // 返回租户ID的表达式，LongValue 是 JSQLParser 中表示 bigint 类型的 class
        return new StringValue(tenantId);
    }

    @Override
    public String getTenantIdColumn() {
        return "tenant_id";
    }

    @Override
    public boolean ignoreTable(String tableName) {
        String tenantId = TenantContextHolder.getTenantId();
        // 判断是否有租户
        if (StrUtil.isNotBlank(tenantId)) {
            // 非业务表
            List<String> tables = ListUtil.toList("sys_dict", "sys_dict_data", "sys_user", "sys_api_key_data");
            return tables.contains(tableName);
        }
        return true;
    }

}